# iPaaS代理调用报错:PKIX path building failed 问题分析及解决
# 问题现象
在 iPaaS 平台注册代理后,调用代理地址时出现如下 SSL 握手异常:I/O error on GET request for "http://192.168.XX.XX:10001/test/cdx": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
该错误表面上是 SSL 证书验证失败,但实际根源与证书无关,而是由请求地址重定向导致的间接问题。
# 原因分析
# 1. 配置错误
在 iPaaS 中注册业务代理时,填写的业务 URI 为 http://192.168.XX.XX:10001/test/cdx/(末尾多了一个斜杠),而实际业务的正确 URI 应为 http://192.168.XX.XX:10001/test/cdx(无末尾斜杠)。
# 2. 业务端的重定向行为
当直接通过浏览器或工具(如 curl)访问带末尾斜杠的地址时,业务服务器(如 Tomcat、Nginx 等)会自动返回 301/302 重定向响应,将请求指向不带斜杠的正确地址。客户端自动跟随重定向后即可成功访问,因此直接调用时不会感知到问题。
# 3. iPaaS/ESB 不支持自动重定向
iPaaS(或 ESB 中间件)在处理代理请求时,默认不会自动跟随 HTTP 重定向。当代理将请求发送到带斜杠的错误地址后,业务服务器返回重定向响应,但 iPaaS 不会再次请求重定向后的地址,而是直接将重定向响应(通常为 301/302 状态码)返回给调用方。
然而,在 SSL 握手过程中,由于重定向响应并非预期的业务响应,客户端在收到重定向响应前已与服务器建立了 TLS 连接,而该连接使用的证书可能无法通过客户端的信任库验证(例如自签名证书或证书链不完整),从而抛出 PKIX path building failed 异常。此异常是证书验证失败的表现,但根本原因是请求地址错误触发了重定向,导致 TLS 会话的证书校验环节异常中断。
# 解决方案
# 1. 修正 iPaaS 中的业务 URI
将 iPaaS 代理配置中的业务 URI 修改为正确的最终地址(即去掉末尾多余的斜杠),确保 iPaaS 直接请求到业务服务器的实际端点,避免触发重定向。
正确地址示例:
http://192.168.XX.XX:10001/test/cdx
错误地址示例:
http://192.168.XX.XX:10001/test/cdx/
修改后,iPaaS 代理即可正常转发请求,不再出现 SSL 握手异常。
# 2. 验证业务真实地址(避免重定向)
如果不确定业务接口的最终地址,或怀疑存在重定向,可在业务服务器所在的网络环境下使用 curl -v 命令进行测试,观察响应头中的重定向信息。
测试命令:
curl -v http://192.168.XX.XX:10001/test/cdx/
* Connected to 192.168.XX.XX (192.168.XX.XX) port 10001 (#0)
> GET /test/cdx/ HTTP/1.1
> Host: 192.168.XX.XX:10001
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Location: http://192.168.XX.XX:10001/test/cdx
< Content-Length: 0
< Date: ...
观察响应中的 Location 字段,即为最终的正确地址。将 iPaaS 中的 URI 配置为该地址即可。
# 总结
iPaaS 代理配置的业务 URI 必须与业务服务器实际端点完全一致,不能依赖 HTTP 重定向,因为中间件通常不会自动跟随重定向。
当出现 PKIX path building failed 这类 SSL 证书异常时,除了常规的证书问题排查外,也应考虑请求地址是否触发了重定向,导致 TLS 握手阶段异常。
使用 curl -v 可快速检查目标地址是否存在重定向,帮助定位正确的业务 URI。